home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch6n < prev    next >
Encoding:
Internet Message Format  |  1989-11-27  |  57.3 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i067:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch6n
  5. Message-ID: <4856@tekred.CNA.TEK.COM>
  6. Date: 22 Nov 89 19:56:20 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 1345
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 67
  13. Archive-name: NetHack3/Patch6n
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 14 (of 15)."
  25. # Contents:  others/Makefile.tcc src/monst.c1
  26. # Wrapped by billr@saab on Wed Nov 22 10:50:21 1989
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'others/Makefile.tcc' -a "${1}" != "-c" ; then 
  29.   echo shar: clobbering existing file \"'others/Makefile.tcc'\"
  30. fi
  31. echo shar: Extracting \"'others/Makefile.tcc'\" \(15148 characters\)
  32. sed "s/^X//" >'others/Makefile.tcc' <<'END_OF_FILE'
  33. X#    SCCS Id: @(#)Makefile.tcc    3.0    89/11/18
  34. X#    PC NetHack 3.0 Makefile for Turbo C 2.0
  35. X#    Perpetrator: Mike Threepoint, 890707
  36. X
  37. X###
  38. X### Directories
  39. X###
  40. X# makedefs.c hardcodes the include and auxil directories, don't change them.
  41. XOBJ    = o
  42. XINCL    = ..\include
  43. XAUX    = ..\auxil
  44. XSRC    = ..\src
  45. XOTHERS    = ..\others
  46. X
  47. X
  48. X###
  49. X### Locals
  50. X###
  51. X
  52. X# the name of the game
  53. XGAME    = nethack
  54. X
  55. X# the place of the game
  56. XGAMEDIR = \games\$(GAME)
  57. X
  58. X# the filename of the game
  59. XGAMEFILE = $(GAMEDIR)\$(GAME).exe
  60. X
  61. X
  62. X###
  63. X### Compiler
  64. X###
  65. XCC    = tcc
  66. X
  67. X# must use Huge model; Large is limited to 64K total global data.
  68. XMODEL    = h
  69. X
  70. X# signed chars, jump optimize, strict ANSI, register optimize, no stack frame
  71. XCFLAGS    = -c -no -m$(MODEL) -I$(INCL) -K- -O -A -Z -k- -w-pia -w-pro $(WIZARD)
  72. X## Note: Turbo C 2.0's -Z is bugged.  If you have weird problems, try -Z-.
  73. X
  74. X# wizardly defines
  75. XWIZARD    = -DDEBUG
  76. X
  77. X# linkers
  78. XTLINK    = tlink
  79. XLINK    = link
  80. X## There is a bug in TLINK and huge model:
  81. X##
  82. X## TLINK 1.0 treated huge like large, with 64K data limit.
  83. X## TLINK 1.1 fixed that, but chokes over huge data segments anyway.
  84. X## TLINK 2.0 links and is smaller than LINK /EXEPACK, but for some
  85. X## reason with too many objects it produces a file that freaks out
  86. X## and hangs the system.
  87. X##
  88. X## Also note:
  89. X##
  90. X## Using /EXEPACK with LINK will greatly reduce the size of the
  91. X## executable (about 50K), it will also greatly increase the memory
  92. X## required to load it (about 20K).
  93. X
  94. XLIBS    = $(LIB)\c$(MODEL)
  95. X# no need to link in the floating point library
  96. XC0    = $(LIB)\c0$(MODEL).obj
  97. X
  98. XLFLAGS    = /noi /seg:1024
  99. XTLFLAGS = /x/c
  100. X
  101. X# assembler
  102. XASM    = tasm
  103. XAFLAGS    = /MX
  104. X
  105. X
  106. X###
  107. X### Rules
  108. X###
  109. X# search order
  110. X.SUFFIXES: .exe .obj .c .asm .y .l
  111. X# .c -> .obj
  112. X.c.obj:
  113. X    $(CC) $(CFLAGS) -c $<
  114. X# .asm -> .obj
  115. X.asm.obj:
  116. X    $(ASM) $< $(AFLAGS);
  117. X# .obj -> .exe (for tlink)
  118. X.obj.exe:
  119. X    $(TLINK) $(TLFLAGS) $(C0) $<, $@,, $(LIBS);
  120. X## Note: .y -> .c or .l -> .c rules are missing, because none of the developers
  121. X##     had a yacc or lex for the PC to write rules for.
  122. X
  123. X
  124. X###
  125. X### Optional features (see pcconf.h)
  126. X###
  127. X# uncomment the blank definitions if not used
  128. X
  129. X# overlays
  130. X#OVERLAY = $(OBJ)\trampoli.obj ovlmgr.obj
  131. X#OVERLAY_H = $(INCL)\trampoli.h
  132. X#LINK_LIST = $(OVERLAYS)
  133. XOVERLAY =
  134. XOVERLAY_H =
  135. XLINK_LIST = $(HOBJ)
  136. X
  137. X# Fish's TERMLIB termcap library (see the rule below)
  138. X#TERMLIB = $(LIB)\termlib.lib
  139. XTERMLIB =
  140. X
  141. X# high-quality BSD random number generation routines
  142. X#RANDOM = $(OBJ)\random.obj
  143. XRANDOM =
  144. X
  145. X
  146. X###
  147. X### Dependencies
  148. X###
  149. X# nothing below this line should have to be changed
  150. X# other things that must be reconfigured are in config.h and $(TARG)conf.h
  151. X
  152. X# target prefix
  153. XTARG    = pc
  154. X
  155. X# object files for makedefs.exe
  156. XMAKEOBJS = $(OBJ)\makedefs.obj $(OBJ)\monst.obj $(OBJ)\objects.obj
  157. X
  158. X# object files for lev_comp.exe
  159. XSPLEVOBJS = $(OBJ)\lev_comp.obj   $(OBJ)\lev_lex.obj  $(OBJ)\lev_main.obj \
  160. X        $(OBJ)\monst.obj      $(OBJ)\objects.obj
  161. X
  162. X# object files for termlib.lib
  163. XTERMOBJS = $(OBJ)\tgetent.obj  $(OBJ)\tgetflag.obj  $(OBJ)\tgetnum.obj \
  164. X       $(OBJ)\tgetstr.obj  $(OBJ)\tgoto.obj     $(OBJ)\tputs.obj \
  165. X       $(OBJ)\isdigit.obj  $(OBJ)\fgetlr.obj
  166. XTERMLIST = -+ $(OBJ)\tgetent.obj -+ $(OBJ)\tgetflag.obj -+ $(OBJ)\tgetnum.obj \
  167. X       -+ $(OBJ)\tgetstr.obj -+ $(OBJ)\tgoto.obj    -+ $(OBJ)\tputs.obj \
  168. X       -+ $(OBJ)\isdigit.obj -+ $(OBJ)\fgetlr.obj
  169. X
  170. X# alloc.c is completely unnecessary for any PC NetHack executable.
  171. X# panic.c is unnecessary for makedefs.exe and lev_comp.exe.
  172. X# ioctl.c is unnecessary for nethack.exe.
  173. X
  174. XROOT =    $(OBJ)\main.obj     $(OBJ)\allmain.obj    $(OBJ)\termcap.obj \
  175. X    $(OBJ)\cmd.obj        $(OBJ)\hack.obj     $(OBJ)\msdos.obj \
  176. X    $(OVERLAY)
  177. X
  178. X# the overlays -- the Microsoft Overlay Linker is limited to 63
  179. X
  180. XOVL01 = $(OBJ)\decl.obj
  181. XOVL02 = $(OBJ)\topl.obj
  182. XOVL03 = $(OBJ)\pri.obj $(OBJ)\prisym.obj
  183. XOVL04 = $(OBJ)\rnd.obj $(RANDOM)
  184. XOVL05 = $(OBJ)\timeout.obj
  185. XOVL06 = $(OBJ)\mon.obj $(OBJ)\exper.obj $(OBJ)\attrib.obj
  186. XOVL07 = $(OBJ)\monst.obj $(OBJ)\mondata.obj
  187. XOVL08 = $(OBJ)\monmove.obj $(OBJ)\track.obj
  188. XOVL09 = $(OBJ)\dog.obj $(OBJ)\dogmove.obj
  189. XOVL10 = $(OBJ)\makemon.obj
  190. XOVL11 = $(OBJ)\do_name.obj $(OBJ)\getline.obj
  191. XOVL12 = $(OBJ)\weapon.obj
  192. XOVL13 = $(OBJ)\wield.obj
  193. XOVL14 = $(OBJ)\invent.obj
  194. XOVL15 = $(OBJ)\objects.obj
  195. XOVL16 = $(OBJ)\mkobj.obj $(OBJ)\o_init.obj
  196. XOVL17 = $(OBJ)\objnam.obj
  197. XOVL18 = $(OBJ)\worn.obj
  198. XOVL19 = $(OBJ)\do_wear.obj
  199. XOVL20 = $(OBJ)\trap.obj
  200. XOVL21 = $(OBJ)\dothrow.obj
  201. XOVL22 = $(OBJ)\dokick.obj
  202. XOVL23 = $(OBJ)\uhitm.obj
  203. XOVL24 = $(OBJ)\mhitu.obj
  204. XOVL25 = $(OBJ)\mcastu.obj
  205. XOVL26 = $(OBJ)\mhitm.obj
  206. XOVL27 = $(OBJ)\mthrowu.obj
  207. XOVL28 = $(OBJ)\steal.obj
  208. XOVL29 = $(OBJ)\priest.obj
  209. XOVL30 = $(OBJ)\vault.obj
  210. XOVL31 = $(OBJ)\shk.obj $(OBJ)\shknam.obj
  211. XOVL32 = $(OBJ)\wizard.obj
  212. XOVL33 = $(OBJ)\worm.obj
  213. XOVL34 = $(OBJ)\were.obj
  214. XOVL35 = $(OBJ)\demon.obj
  215. XOVL36 = $(OBJ)\artifact.obj
  216. XOVL37 = $(OBJ)\music.obj $(OBJ)\dbridge.obj
  217. XOVL38 = $(OBJ)\sit.obj $(OBJ)\fountain.obj
  218. XOVL39 = $(OBJ)\sounds.obj
  219. XOVL40 = $(OBJ)\spell.obj
  220. XOVL41 = $(OBJ)\read.obj
  221. XOVL42 = $(OBJ)\potion.obj
  222. XOVL43 = $(OBJ)\zap.obj
  223. XOVL44 = $(OBJ)\eat.obj $(OBJ)\rumors.obj
  224. XOVL45 = $(OBJ)\do.obj
  225. XOVL46 = $(OBJ)\search.obj
  226. XOVL47 = $(OBJ)\lock.obj
  227. XOVL48 = $(OBJ)\apply.obj
  228. XOVL49 = $(OBJ)\engrave.obj
  229. XOVL50 = $(OBJ)\write.obj
  230. XOVL51 = $(OBJ)\pray.obj
  231. XOVL52 = $(OBJ)\options.obj
  232. XOVL53 = $(OBJ)\pickup.obj
  233. XOVL54 = $(OBJ)\polyself.obj
  234. XOVL55 = $(OBJ)\u_init.obj
  235. XOVL56 = $(OBJ)\extralev.obj
  236. XOVL57 = $(OBJ)\mklev.obj $(OBJ)\mkroom.obj
  237. XOVL58 = $(OBJ)\mkmaze.obj $(OBJ)\sp_lev.obj
  238. XOVL59 = $(OBJ)\restore.obj $(OBJ)\save.obj $(OBJ)\bones.obj
  239. XOVL60 = $(OBJ)\rip.obj $(OBJ)\topten.obj $(OBJ)\end.obj
  240. XOVL61 = $(OBJ)\unix.obj $(OBJ)\tty.obj $(OBJ)\mail.obj
  241. XOVL62 = $(OBJ)\pager.obj
  242. XOVL63 = $(OBJ)\version.obj
  243. X
  244. X# date.h dependencies
  245. XVOBJ = $(ROOT)    $(OVL01) $(OVL02) $(OVL03) $(OVL04) $(OVL05) $(OVL06) $(OVL07) \
  246. X       $(OVL08) $(OVL09) $(OVL10) $(OVL11) $(OVL12) $(OVL13) $(OVL14) $(OVL15) \
  247. X       $(OVL16) $(OVL17) $(OVL18) $(OVL19) $(OVL20) $(OVL21) $(OVL22) $(OVL23) \
  248. X       $(OVL24) $(OVL25) $(OVL26) $(OVL27) $(OVL28) $(OVL29) $(OVL30) $(OVL31) \
  249. X       $(OVL32) $(OVL33) $(OVL34) $(OVL35) $(OVL36) $(OVL37) $(OVL38) $(OVL39) \
  250. X       $(OVL40) $(OVL41) $(OVL42) $(OVL43) $(OVL44) $(OVL45) $(OVL46) $(OVL47) \
  251. X       $(OVL48) $(OVL49) $(OVL50) $(OVL51) $(OVL52) $(OVL53) $(OVL54) $(OVL55) \
  252. X       $(OVL56) $(OVL57) $(OVL58) $(OVL59) $(OVL60) $(OVL61) $(OVL62)
  253. X
  254. X# nethack.exe dependencies, non-overlay link list
  255. XHOBJ =    $(VOBJ) $(OVL63)
  256. X
  257. X# overlay link list
  258. XOVERLAYS = $(ROOT)    ($(OVL01)) ($(OVL02)) ($(OVL03)) ($(OVL04)) ($(OVL05)) \
  259. X       ($(OVL06)) ($(OVL07)) ($(OVL08)) ($(OVL09)) ($(OVL10)) ($(OVL11)) \
  260. X       ($(OVL12)) ($(OVL13)) ($(OVL14)) ($(OVL15)) ($(OVL16)) ($(OVL17)) \
  261. X       ($(OVL18)) ($(OVL19)) ($(OVL20)) ($(OVL21)) ($(OVL22)) ($(OVL23)) \
  262. X       ($(OVL24)) ($(OVL25)) ($(OVL26)) ($(OVL27)) ($(OVL28)) ($(OVL29)) \
  263. X       ($(OVL30)) ($(OVL31)) ($(OVL32)) ($(OVL33)) ($(OVL34)) ($(OVL35)) \
  264. X       ($(OVL36)) ($(OVL37)) ($(OVL38)) ($(OVL39)) ($(OVL40)) ($(OVL41)) \
  265. X       ($(OVL42)) ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) \
  266. X       ($(OVL48)) ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) \
  267. X       ($(OVL54)) ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) \
  268. X       ($(OVL60)) ($(OVL61)) ($(OVL62)) ($(OVL63))
  269. X
  270. X# header dependencies
  271. X
  272. XPCCONF_H   = $(INCL)\$(TARG)conf.h  $(INCL)\msdos.h    $(INCL)\system.h
  273. XGLOBAL_H   = $(INCL)\global.h        $(INCL)\coord.h    $(PCCONF_H)
  274. XCONFIG_H   = $(INCL)\config.h        $(INCL)\tradstdc.h    $(GLOBAL_H)
  275. XTRAP_H       = $(INCL)\trap.h
  276. XPERMONST_H = $(INCL)\permonst.h     $(INCL)\monflag.h
  277. XYOU_H       = $(INCL)\you.h        $(INCL)\attrib.h    $(PERMONST_H) \
  278. X         $(INCL)\mondata.h        $(INCL)\monst.h    $(INCL)\youprop.h
  279. XDECL_H       = $(INCL)\spell.h        $(INCL)\obj.h    $(YOU_H) \
  280. X         $(INCL)\onames.h        $(INCL)\pm.h
  281. XHACK_H       = $(CONFIG_H)        $(DECL_H)        $(INCL)\monsym.h \
  282. X         $(INCL)\mkroom.h        $(INCL)\objclass.h    $(INCL)\gold.h \
  283. X         $(INCL)\trap.h        $(INCL)\flag.h    $(INCL)\rm.h \
  284. X         $(OVERLAY_H)
  285. X
  286. X## extern.h, and decl.h contain only external declarations.
  287. X##
  288. X## If anything in them changes, all other files involving the changed routines
  289. X## should be changed to reflect them.  Including them in their respective
  290. X## dependency lists will make sure everything is correct, but causes frequent
  291. X## near-total recompiles.  By leaving them out, we allow quicker testing of
  292. X## changes, but we presume the wiz knows to be circumspect.
  293. X
  294. X
  295. X###
  296. X### Main targets
  297. X###
  298. X
  299. X$(GAME): $(GAMEFILE) $(GAMEDIR)\data $(GAMEDIR)\rumors
  300. X
  301. X$(GAMEFILE): $(GAMEDIR) $(OBJ) $(HOBJ) $(TERMLIB) Makefile
  302. X    @echo Linking...
  303. X    if exist $@ del $@
  304. X        $(LINK) $(C0) $(LINK_LIST),$@,,$(LIBS) $(TERMLIB) $(LFLAGS);
  305. X    @echo NetHack is up to date.
  306. X
  307. Xall:    $(GAME) install
  308. X    @echo Done.
  309. X
  310. X$(OBJ):
  311. X    mkdir $(OBJ)
  312. X
  313. X$(GAMEDIR):
  314. X    mkdir $(GAMEDIR)
  315. X    mkdir $(GAMEDIR)\bones
  316. X
  317. X
  318. X###
  319. X### makedefs.exe
  320. X###
  321. X
  322. Xmakedefs.exe:  $(MAKEOBJS)
  323. X    @$(TLINK) $(TLFLAGS) $(C0) $(MAKEOBJS),$@,,$(LIBS);
  324. X
  325. X$(OBJ)\makedefs.obj:  $(INCL)\config.h $(INCL)\permonst.h $(INCL)\objclass.h
  326. X
  327. X
  328. X###
  329. X### makedefs-generated files
  330. X###
  331. X
  332. X# date.h should be remade any time any of the source is modified
  333. X$(INCL)\date.h:     makedefs.exe $(VOBJ)
  334. X    makedefs -v
  335. X
  336. X$(INCL)\trap.h:     makedefs.exe
  337. X    makedefs -t
  338. X
  339. X$(INCL)\onames.h:    makedefs.exe
  340. X    makedefs -o
  341. X
  342. X$(INCL)\pm.h:        makedefs.exe
  343. X    makedefs -p
  344. X
  345. X$(GAMEDIR)\data:    makedefs.exe $(AUX)\data.base
  346. X    makedefs -d
  347. X    xcopy $(AUX)\data $(GAMEDIR)
  348. X    del $(AUX)\data
  349. X
  350. X$(GAMEDIR)\rumors:    makedefs.exe $(AUX)\rumors.tru $(AUX)\rumors.fal
  351. X    makedefs -r
  352. X    xcopy $(AUX)\rumors $(GAMEDIR)
  353. X    del $(AUX)\rumors
  354. X
  355. X
  356. X###
  357. X### lev_comp.exe
  358. X###
  359. X
  360. Xlev_comp.exe:  $(SPLEVOBJS)
  361. X    $(TLINK) $(TLFLAGS) $(C0) $(SPLEVOBJS),$@,,$(LIBS);
  362. X
  363. X## Note: UNIX yacc may generate a line reading "#", which Turbo C 2.0, despite
  364. X##     the manual's claims that it should be ignored, treats as an error.
  365. X##     You may have to remove such a line to compile lev_comp.c.
  366. X$(OBJ)\lev_comp.obj:  $(HACK_H) $(INCL)\sp_lev.h
  367. X    $(CC) $(CFLAGS) -A- $*.c
  368. X$(OBJ)\lev_lex.obj:  $(INCL)\lev_comp.h $(HACK_H) $(INCL)\sp_lev.h
  369. X$(OBJ)\lev_main.obj:  $(HACK_H) $(INCL)\sp_lev.h
  370. X
  371. X# If you have yacc or lex programs, and make any changes,
  372. X# add some .y.c and .l.c rules to your Make.ini.
  373. X#
  374. X#lev_comp.c:  lev_comp.y
  375. X#lev_lex.c:  lev_comp.l
  376. X
  377. X
  378. X###
  379. X### termlib.lib
  380. X###
  381. X
  382. X#$(TERMLIB): $(TERMOBJS)
  383. X#    tlib $(TERMLIB) /C $(TERMLIST);
  384. X
  385. X
  386. X###
  387. X### Secondary targets
  388. X###
  389. X
  390. Xinstall:  $(GAMEDIR)\NetHack.cnf $(GAMEDIR)\record $(GAMEDIR)\termcap spec_levs
  391. X    xcopy $(AUX)\*. $(GAMEDIR)
  392. X    @echo Auxiliary files installed.
  393. X
  394. X$(GAMEDIR)\NetHack.cnf:
  395. X    xcopy $(OTHERS)\NetHack.cnf $(GAMEDIR)
  396. X$(GAMEDIR)\record:
  397. X    touch $(GAMEDIR)\record
  398. X$(GAMEDIR)\termcap:
  399. X    xcopy $(OTHERS)\termcap $(GAMEDIR)
  400. X
  401. Xspec_levs: $(AUX)\castle.des $(AUX)\endgame.des $(AUX)\tower.des lev_comp.exe
  402. X    lev_comp $(AUX)\castle.des
  403. X    lev_comp $(AUX)\endgame.des
  404. X    lev_comp $(AUX)\tower.des
  405. X    chdir $(AUX)
  406. X    xcopy castle $(GAMEDIR)
  407. X    del castle
  408. X    xcopy endgame $(GAMEDIR)
  409. X    del endgame
  410. X    xcopy tower? $(GAMEDIR)
  411. X    del tower?
  412. X    chdir $(SRC)
  413. X    @echo Special levels compiled.
  414. X
  415. Xclean:
  416. X    del $(OBJ)\*.obj
  417. X    rmdir $(OBJ)
  418. X
  419. Xspotless: clean
  420. X    del $(INCL)\date.h
  421. X    del $(INCL)\onames.h
  422. X    del $(INCL)\pm.h
  423. X    del makedefs.exe
  424. X    if exist lev_comp.exe del lev_comp.exe
  425. X
  426. X
  427. X###
  428. X### Other dependencies
  429. X###
  430. X
  431. X# OS-dependent filenames
  432. X$(OBJ)\main.obj:     $(HACK_H) $(TARG)main.c
  433. X    $(CC) $(CFLAGS) -o$@ $(TARG)main.c
  434. X
  435. X$(OBJ)\tty.obj:      $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c
  436. X    $(CC) $(CFLAGS) -o$@ $(TARG)tty.c
  437. X
  438. X$(OBJ)\unix.obj:     $(HACK_H) $(TARG)unix.c
  439. X    $(CC) $(CFLAGS) -o$@ $(TARG)unix.c
  440. X
  441. X# GO AHEAD, DELETE THIS LINE
  442. X
  443. X$(OBJ)\allmain.obj:    $(HACK_H)
  444. X$(OBJ)\alloc.obj:    $(CONFIG_H)
  445. X$(OBJ)\apply.obj:    $(HACK_H)   $(INCL)\edog.h
  446. X$(OBJ)\artifact.obj:    $(HACK_H)   $(INCL)\artifact.h
  447. X$(OBJ)\attrib.obj:    $(HACK_H)
  448. X$(OBJ)\bones.obj:    $(HACK_H)
  449. X$(OBJ)\cmd.obj:     $(HACK_H)   $(INCL)\func_tab.h
  450. X$(OBJ)\dbridge.obj:    $(HACK_H)
  451. X$(OBJ)\decl.obj:    $(HACK_H)
  452. X$(OBJ)\demon.obj:    $(HACK_H)
  453. X$(OBJ)\do.obj:        $(HACK_H)
  454. X$(OBJ)\do_name.obj:    $(HACK_H)
  455. X$(OBJ)\do_wear.obj:    $(HACK_H)
  456. X$(OBJ)\dog.obj:     $(HACK_H)   $(INCL)\edog.h
  457. X$(OBJ)\dogmove.obj:    $(HACK_H)   $(INCL)\mfndpos.h     $(INCL)\edog.h
  458. X$(OBJ)\dokick.obj:    $(HACK_H)
  459. X$(OBJ)\dothrow.obj:    $(HACK_H)
  460. X$(OBJ)\eat.obj:     $(HACK_H)
  461. X$(OBJ)\end.obj:     $(HACK_H)   $(INCL)\eshk.h
  462. X$(OBJ)\engrave.obj:    $(HACK_H)
  463. X$(OBJ)\exper.obj:    $(HACK_H)
  464. X$(OBJ)\extralev.obj:    $(HACK_H)
  465. X$(OBJ)\fountain.obj:    $(HACK_H)
  466. X$(OBJ)\getline.obj:    $(HACK_H)   $(INCL)\func_tab.h
  467. X$(OBJ)\hack.obj:    $(HACK_H)
  468. X$(OBJ)\invent.obj:    $(HACK_H)   $(INCL)\lev.h     $(INCL)\wseg.h
  469. X$(OBJ)\ioctl.obj:    $(HACK_H)
  470. X$(OBJ)\lev_comp.obj:    $(HACK_H)   $(INCL)\sp_lev.h
  471. X$(OBJ)\lev_lex.obj:    $(HACK_H)   $(INCL)\sp_lev.h     $(INCL)\lev_comp.h
  472. X$(OBJ)\lev_main.obj:    $(HACK_H)   $(INCL)\sp_lev.h
  473. X$(OBJ)\lock.obj:    $(HACK_H)
  474. X$(OBJ)\makemon.obj:    $(HACK_H)
  475. X$(OBJ)\mail.obj:    $(HACK_H)
  476. X$(OBJ)\mcastu.obj:    $(HACK_H)
  477. X$(OBJ)\mhitm.obj:    $(HACK_H)   $(INCL)\artifact.h
  478. X$(OBJ)\mhitu.obj:    $(HACK_H)   $(INCL)\artifact.h     $(INCL)\edog.h
  479. X$(OBJ)\mklev.obj:    $(HACK_H)
  480. X$(OBJ)\mkmaze.obj:    $(HACK_H)
  481. X$(OBJ)\mkobj.obj:    $(HACK_H)
  482. X$(OBJ)\mkroom.obj:    $(HACK_H)
  483. X$(OBJ)\mon.obj:     $(HACK_H)   $(INCL)\mfndpos.h     $(INCL)\wseg.h
  484. X$(OBJ)\mondata.obj:    $(HACK_H)   $(INCL)\eshk.h     $(INCL)\epri.h
  485. X$(OBJ)\monmove.obj:    $(HACK_H)   $(INCL)\mfndpos.h     $(INCL)\artifact.h
  486. X$(OBJ)\monst.obj:    $(CONFIG_H) $(PERMONST_H)     $(INCL)\eshk.h \
  487. X                    $(INCL)\vault.h     $(INCL)\epri.h
  488. X$(OBJ)\msdos.obj:    $(HACK_H) msdos.c
  489. X    $(CC) $(CFLAGS) -A- $*.c
  490. X# set ANSI only off -- many MS-DOS specific things.
  491. X$(OBJ)\mthrowu.obj:    $(HACK_H)
  492. X$(OBJ)\music.obj:    $(HACK_H)
  493. X$(OBJ)\o_init.obj:    $(HACK_H)   $(INCL)\onames.h
  494. X$(OBJ)\objects.obj:    $(CONFIG_H) $(INCL)\obj.h     $(INCL)\objclass.h \
  495. X                    $(INCL)\prop.h
  496. X$(OBJ)\objnam.obj:    $(HACK_H)
  497. X$(OBJ)\options.obj:    $(HACK_H)
  498. X$(OBJ)\pager.obj:    $(HACK_H)
  499. X$(OBJ)\panic.obj:    $(CONFIG_H)
  500. X$(OBJ)\pickup.obj:    $(HACK_H)
  501. X$(OBJ)\polyself.obj:    $(HACK_H)
  502. X$(OBJ)\potion.obj:    $(HACK_H)
  503. X$(OBJ)\pray.obj:    $(HACK_H)
  504. X$(OBJ)\pri.obj:     $(HACK_H)   $(INCL)\epri.h     $(INCL)\termcap.h
  505. X$(OBJ)\priest.obj:    $(HACK_H)   $(INCL)\mfndpos.h     $(INCL)\eshk.h \
  506. X                    $(INCL)\epri.h
  507. X$(OBJ)\prisym.obj:    $(HACK_H)   $(INCL)\lev.h     $(INCL)\wseg.h
  508. X$(OBJ)\random.obj:
  509. X$(OBJ)\read.obj:    $(HACK_H)
  510. X$(OBJ)\restore.obj:    $(HACK_H)   $(INCL)\lev.h     $(INCL)\wseg.h
  511. X$(OBJ)\rip.obj:
  512. X    $(CC) $(CFLAGS) -d- $*.c
  513. X# must not merge strings, or the tombstone lines will overlap
  514. X$(OBJ)\rnd.obj:     $(HACK_H)
  515. X$(OBJ)\rumors.obj:    $(HACK_H)
  516. X$(OBJ)\save.obj:    $(HACK_H)   $(INCL)\lev.h     $(INCL)\wseg.h
  517. X$(OBJ)\search.obj:    $(HACK_H)   $(INCL)\artifact.h
  518. X$(OBJ)\shk.obj:     $(HACK_H)   $(INCL)\eshk.h
  519. X$(OBJ)\shknam.obj:    $(HACK_H)   $(INCL)\eshk.h
  520. X$(OBJ)\sit.obj:     $(HACK_H)
  521. X$(OBJ)\sounds.obj:    $(HACK_H)   $(INCL)\edog.h     $(INCL)\eshk.h
  522. X$(OBJ)\sp_lev.obj:    $(HACK_H)   $(INCL)\sp_lev.h
  523. X$(OBJ)\spell.obj:    $(HACK_H)
  524. X$(OBJ)\steal.obj:    $(HACK_H)
  525. X$(OBJ)\termcap.obj:    $(HACK_H)   $(INCL)\termcap.h
  526. X$(OBJ)\timeout.obj:    $(HACK_H)
  527. X$(OBJ)\topl.obj:    $(HACK_H)
  528. X$(OBJ)\topten.obj:    $(HACK_H)
  529. X$(OBJ)\track.obj:    $(HACK_H)
  530. X$(OBJ)\trampoli.obj:    $(HACK_H)
  531. X$(OBJ)\trap.obj:    $(HACK_H)   $(INCL)\edog.h     $(INCL)\trapname.h
  532. X$(OBJ)\u_init.obj:    $(HACK_H)
  533. X$(OBJ)\uhitm.obj:    $(HACK_H)   $(INCL)\artifact.h
  534. X$(OBJ)\vault.obj:    $(HACK_H)   $(INCL)\vault.h
  535. X$(OBJ)\version.obj:    $(HACK_H)   $(INCL)\date.h
  536. X$(OBJ)\weapon.obj:    $(HACK_H)
  537. X$(OBJ)\were.obj:    $(HACK_H)
  538. X$(OBJ)\wield.obj:    $(HACK_H)
  539. X$(OBJ)\wizard.obj:    $(HACK_H)
  540. X$(OBJ)\worm.obj:    $(HACK_H)   $(INCL)\wseg.h
  541. X$(OBJ)\worn.obj:    $(HACK_H)
  542. X$(OBJ)\write.obj:    $(HACK_H)
  543. X$(OBJ)\zap.obj:     $(HACK_H)
  544. END_OF_FILE
  545. if test 15148 -ne `wc -c <'others/Makefile.tcc'`; then
  546.     echo shar: \"'others/Makefile.tcc'\" unpacked with wrong size!
  547. fi
  548. # end of 'others/Makefile.tcc'
  549. if test -f 'src/monst.c1' -a "${1}" != "-c" ; then 
  550.   echo shar: clobbering existing file \"'src/monst.c1'\"
  551. fi
  552. echo shar: Extracting \"'src/monst.c1'\" \(39921 characters\)
  553. sed "s/^X//" >'src/monst.c1' <<'END_OF_FILE'
  554. X/*    SCCS Id: @(#)monst.c    3.0    89/11/09
  555. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  556. X/* NetHack may be freely redistributed.  See license for details. */
  557. X
  558. X/* since this file is also used in auxiliary programs, don't include all the
  559. X * function declarations for all of nethack
  560. X */
  561. X#define EXTERN_H
  562. X/* #define MAKEDEFS_C    1    /* define for Macs when compiling makedefs */
  563. X#include "config.h"
  564. X#include "permonst.h"
  565. X#include "monsym.h"
  566. X#include "eshk.h"
  567. X#include "vault.h"
  568. X#include "epri.h"
  569. X
  570. X#define NO_ATTK     { 0, 0, 0, 0 }
  571. X
  572. X#ifdef C
  573. X#undef C
  574. X#endif
  575. X#ifdef TEXTCOLOR
  576. X#include "color.h"
  577. X#define C(color)    color
  578. X#define HI_DOMESTIC    BLUE
  579. X#define HI_LORD     MAGENTA
  580. X#else
  581. X#define C(color)
  582. X#endif
  583. X
  584. X#ifndef SPLITMON_2
  585. Xstruct permonst playermon = {        /* used by weapons bonus code */
  586. X    "player", S_HUMAN, 1, 10, 10, 0, 0, G_GENO | G_NOGEN,
  587. X    { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  588. X    45, 400, PL_NSIZ, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  589. X    M2_HUMAN | M2_STRONG | M2_NEEDPICK, C(HI_MON)
  590. X},    *uasmon = &playermon;
  591. X#endif /* SPLITMON_2 */
  592. X
  593. X/*
  594. X *    Rule #1:    monsters of a given class are contiguous in the
  595. X *            mons[] array.
  596. X *
  597. X *    Rule #2:    monsters of a given class are presented in ascending
  598. X *            order of strength.
  599. X *
  600. X *    Rule #3:    monster frequency is included in the geno mask;
  601. X *            the frequency can be from 0 to 7.  0's will also
  602. X *            be skipped during generation.
  603. X *
  604. X * Guidelines for color assignment:
  605. X *
  606. X *    * Use the same color for all `growth stages' of a monster (ex.
  607. X *      little dog/big dog, baby naga/full-grown naga.
  608. X *
  609. X *    * Use described color wherever possible. If the class has `real'
  610. X *      members with strong color associations, use those.
  611. X *
  612. X *    * Favor `cool' colors for cold-resistent monsters, `warm' ones for
  613. X *      fire-resistent ones.
  614. X *
  615. X *    * Try to reserve purple (magenta) for powerful `ruler' monsters (queen
  616. X *      bee, kobold lord, &c.).
  617. X *
  618. X * The aim in assigning colors is to be consistent enough so a player can
  619. X * become `intuitive' about them, deducing some or all of these rules
  620. X * unconsciously. Use your common sense.
  621. X */
  622. X
  623. X#if defined(MACOS) && !defined(MAKEDEFS_C)
  624. Xstruct permonst *mons;       /* for SMALLDATA - mons data stored in NetHack app */
  625. X#else
  626. X#ifndef SPLITMON_2
  627. Xstruct permonst mons[] = {
  628. X/*    ants    */
  629. X    { "giant ant",    S_ANT, 2, 18, 3, 0, 0, (G_GENO | G_SGROUP | 3),
  630. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  631. X      1, 10, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_EGGS,
  632. X      M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
  633. X    { "soldier ant", S_ANT, 3, 18, 3, 0, 0, (G_GENO | G_SGROUP | 2),
  634. X      { { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_DRST, 3, 4 },
  635. X      NO_ATTK, NO_ATTK, NO_ATTK }, 2, 20, 0, MS_SILENT, MZ_TINY,
  636. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
  637. X      M2_HOSTILE | M2_CARNIVORE, C(BLUE) },
  638. X    { "fire ant", S_ANT, 3, 18, 3, 10, 0, (G_GENO | G_SGROUP | 1),
  639. X      { { AT_BITE, AD_FIRE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  640. X      3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_EGGS |
  641. X      M1_FIRE_RES, M2_HOSTILE | M2_CARNIVORE, C(RED) },
  642. X    { "giant beetle", S_ANT, 5, 6, 4, 0, 0, (G_GENO | 3),
  643. X      { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  644. X      1, 10, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_POIS |
  645. X      M1_POIS_RES, M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
  646. X    { "killer bee", S_ANT, 1, 18, -1, 0, 0, (G_GENO | G_LGROUP | 2),
  647. X      { { AT_STNG, AD_DRST, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  648. X      1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
  649. X      M1_POIS | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
  650. X    { "queen bee", S_ANT, 9, 24, -4, 0, 0, (G_GENO | G_NOGEN),
  651. X      { { AT_STNG, AD_DRST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  652. X      1, 10, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_FLY | M1_NOHANDS |
  653. X      M1_POIS | M1_POIS_RES | M1_PRINCE, M2_HOSTILE, C(HI_LORD) },
  654. X/*    blobs    */
  655. X    { "acid blob", S_BLOB, 1, 3, 8, 0, 0, (G_GENO | 2),
  656. X      { { AT_NONE, AD_ACID, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  657. X      3, 30, 0, MS_SILENT, MZ_TINY,
  658. X      M1_NOEYES | M1_NOHANDS | M1_POIS | M1_SLEE_RES | M1_STON_RES,
  659. X      M2_WANDER | M2_NOLIMBS | M2_AMORPHOUS, C(GREEN) },
  660. X    { "quivering blob", S_BLOB, 5, 1, 8, 0, 0, (G_GENO | 2),
  661. X      { { AT_TUCH, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  662. X      20, 200, 0, MS_SILENT, MZ_SMALL, M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
  663. X      M2_WANDER | M2_HOSTILE | M2_NOLIMBS, C(WHITE) },
  664. X    { "gelatinous cube", S_BLOB, 6, 6, 8, 0, 0, (G_GENO | 2),
  665. X      { { AT_TUCH, AD_PLYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  666. X      30, 300, 0, MS_SILENT, MZ_LARGE, M1_NOEYES | M1_NOHANDS |
  667. X      M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES | M1_SLEE_RES,
  668. X      M2_WANDER | M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE, C(CYAN) },
  669. X/*    cockatrice    */
  670. X    { "cockatrice", S_COCKATRICE, 5, 6, 6, 30, 0, (G_GENO | 5),
  671. X      { { AT_BITE, AD_PHYS, 1, 3 }, { AT_TUCH, AD_STON, 0, 0 },
  672. X      NO_ATTK, NO_ATTK, NO_ATTK }, 3, 30, 0, MS_HISS, MZ_SMALL,
  673. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS_RES | M1_STON_RES,
  674. X      M2_HOSTILE, C(YELLOW) },
  675. X/*    dog    */
  676. X    { "little dog", S_DOG, 2, 18, 6, 0, 0, (G_GENO | 1),
  677. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  678. X      15, 150, 0, MS_BARK, MZ_SMALL,
  679. X      M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE, C(HI_DOMESTIC) },
  680. X    { "dog", S_DOG, 4, 16, 5, 0, 0, (G_GENO | 1),
  681. X      { { AT_BITE, AD_PHYS, 1 ,6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  682. X      20, 200, 0, MS_BARK, MZ_MEDIUM,
  683. X      M1_ANIMAL | M1_NOHANDS, M2_CARNIVORE, C(HI_DOMESTIC) },
  684. X    { "large dog", S_DOG, 6, 15, 4, 0, 0, (G_GENO | 1),
  685. X      { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  686. X      25, 250, 0, MS_BARK, MZ_MEDIUM,
  687. X      M1_ANIMAL | M1_NOHANDS, M2_STRONG | M2_CARNIVORE, C(HI_DOMESTIC) },
  688. X    { "jackal", S_DOG, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
  689. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  690. X      25, 250, 0, MS_BARK, MZ_SMALL,
  691. X      M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  692. X    { "jackalwere", S_DOG, 2, 12, 7, 10, -7, G_NOGEN | G_NOCORPSE,
  693. X      { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  694. X      25, 250, 0, MS_BARK, MZ_SMALL,
  695. X      M1_NOPOLY | M1_WERE | M1_NOHANDS | M1_POIS | M1_REGEN,
  696. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  697. X    { "wolf", S_DOG, 5, 12, 4, 0, 0, (G_GENO | G_SGROUP | 2),
  698. X      { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  699. X      25, 250, 0, MS_BARK, MZ_SMALL,
  700. X      M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  701. X    { "wolfwere", S_DOG, 5, 12, 4, 20, -7, G_NOGEN | G_NOCORPSE,
  702. X      { { AT_BITE, AD_WERE, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  703. X      25, 250, 0, MS_BARK, MZ_MEDIUM,
  704. X      M1_NOPOLY | M1_WERE | M1_NOHANDS | M1_POIS | M1_REGEN,
  705. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  706. X    { "winter wolf", S_DOG, 7, 12, 4, 0, 0, (G_GENO | 1),
  707. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_COLD, 2, 6 },
  708. X      NO_ATTK, NO_ATTK, NO_ATTK, },
  709. X      30, 300, 0, MS_BARK, MZ_LARGE, M1_ANIMAL | M1_NOHANDS | M1_COLD_RES,
  710. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
  711. X    { "warg", S_DOG, 7, 12, 4, 0, -5, (G_GENO | G_SGROUP | 2),
  712. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  713. X      35, 350, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS,
  714. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  715. X    { "hell hound pup", S_DOG, 7, 12, 4, 20, -5,
  716. X      (G_HELL | G_GENO | G_SGROUP | 1),
  717. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_BREA, AD_FIRE, 2, 6 },
  718. X      NO_ATTK, NO_ATTK, NO_ATTK },
  719. X      20, 200, 0, MS_BARK, MZ_SMALL, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
  720. X      M2_HOSTILE | M2_CARNIVORE, C(RED) },
  721. X    { "hell hound", S_DOG, 12, 14, 2, 20, 0, (G_HELL | G_GENO | 1),
  722. X      { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BREA, AD_FIRE, 3, 6 },
  723. X      NO_ATTK, NO_ATTK, NO_ATTK, },
  724. X      30, 300, 0, MS_BARK, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
  725. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
  726. X#ifdef CHARON
  727. X    { "Cerberus", S_DOG, 12, 10, 2, 20, -7, (G_HELL | G_UNIQ | 1),
  728. X      { { AT_BITE, AD_PHYS, 3, 6 }, { AT_BITE, AD_PHYS, 3, 6 },
  729. X      { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
  730. X      50, 350, 0, MS_BARK, MZ_LARGE,
  731. X      M1_NOPOLY | M1_ANIMAL | M1_NOHANDS | M1_FIRE_RES,
  732. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
  733. X#endif
  734. X/*    eyes    */
  735. X    { "floating eye", S_EYE, 2, 1, 9, 10, 0, (G_GENO | 5),
  736. X      { { AT_NONE, AD_PLYS, 0, 70 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  737. X      1, 10, 0, MS_SILENT, MZ_SMALL, M1_FLY | M1_NOHANDS,
  738. X      M2_HOSTILE | M2_NOLIMBS, C(BLUE)},
  739. X    { "freezing sphere", S_EYE, 6, 13, 4, 0, 0, (G_GENO | 2),
  740. X      { { AT_EXPL, AD_COLD, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  741. X      1, 10, 0, MS_SILENT, MZ_SMALL, M1_FLY | M1_NOHANDS | M1_COLD_RES,
  742. X      M2_HOSTILE | M2_NOLIMBS, C(WHITE) },
  743. X/*    felines     */
  744. X    { "kitten", S_FELINE, 2, 18, 6, 0, 0, (G_GENO | 1),
  745. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  746. X      15, 150, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
  747. X      M2_WANDER | M2_CARNIVORE, C(HI_DOMESTIC) },
  748. X    { "housecat", S_FELINE, 4, 16, 5, 0, 0, (G_GENO | 1),
  749. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  750. X      20, 200, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
  751. X      M2_CARNIVORE, C(HI_DOMESTIC) },
  752. X    { "large cat", S_FELINE, 6, 15, 4, 0, 0, (G_GENO | 1),
  753. X      { { AT_BITE, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  754. X      25, 250, 0, MS_MEW, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
  755. X      M2_STRONG | M2_CARNIVORE, C(HI_DOMESTIC) },
  756. X    { "jaguar", S_FELINE, 4, 15, 6, 0, 0, (G_GENO | 2),
  757. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  758. X        { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
  759. X      30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  760. X      M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
  761. X    { "tiger", S_FELINE, 6, 12, 6, 0, 0, (G_GENO | 2),
  762. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  763. X        { AT_BITE, AD_PHYS, 1, 10 }, NO_ATTK, NO_ATTK },
  764. X      30, 300, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  765. X      M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
  766. X/*    gremlins    */
  767. X    { "gremlin", S_GREMLIN, 5, 12, 2, 25, -9, (G_GENO | 2),
  768. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  769. X      { AT_BITE, AD_PHYS, 1, 4 }, { AT_CLAW, AD_CURS, 0, 0 }, NO_ATTK },
  770. X      10, 30, 0, MS_LAUGH, MZ_SMALL,
  771. X      M1_SWIM | M1_HUMANOID | M1_POIS | M1_STALK, 0, C(GREEN) },
  772. X/*    humanoids    */
  773. X#ifdef TOLKIEN
  774. X    { "hobbit", S_HUMANOID, 1, 9, 7, 0, 6, (G_GENO | 2),
  775. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  776. X      20, 200, 0, MS_HUMANOID, MZ_SMALL,
  777. X      M1_HUMANOID | M1_COLLECT, 0, C(HI_MON) },
  778. X#endif
  779. X    { "bugbear", S_HUMANOID, 3, 9, 5, 0, -6, (G_GENO | 1),
  780. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  781. X      25, 250, 0, MS_GROWL, MZ_LARGE, M1_HUMANOID | M1_COLLECT,
  782. X      M2_STRONG, C(BROWN) },
  783. X    { "dwarf", S_HUMANOID,    2, 6, 4, 10, 4, (G_GENO | 3),
  784. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  785. X      30, 300, 0, MS_HUMANOID, MZ_HUMAN,
  786. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  787. X      M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG, C(HI_MON)},
  788. X    { "dwarf lord", S_HUMANOID,  4, 6, 4, 10, 5, (G_GENO | 2),
  789. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  790. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
  791. X      M1_HUMANOID | M1_LORD | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  792. X      M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG, C(HI_MON) },
  793. X    { "dwarf king", S_HUMANOID,  6, 6, 4, 20, 6, (G_GENO | 1),
  794. X      { { AT_WEAP, AD_PHYS, 2, 6 }, { AT_WEAP, AD_PHYS, 2, 6 },
  795. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_HUMANOID, MZ_HUMAN,
  796. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_PRINCE,
  797. X      M2_DWARF | M2_TUNNEL | M2_NEEDPICK | M2_STRONG, C(HI_LORD) },
  798. X/*    imps & other minor demons/devils */
  799. X    { "manes", S_IMP, 1, 3, 7, 0, -7, (G_GENO | G_LGROUP | G_NOCORPSE | 1),
  800. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  801. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  802. X      10, 100, 0, MS_JEER, MZ_SMALL, M1_POIS | M1_STALK, 0, C(RED) },
  803. X    { "homunculus", S_IMP, 2, 12, 6, 10, -7, (G_GENO | 2),
  804. X      { { AT_BITE, AD_SLEE, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  805. X      20, 200, 0, MS_SILENT, MZ_TINY, M1_FLY | M1_POIS |
  806. X      M1_POIS_RES | M1_SLEE_RES | M1_STALK, 0, C(GREEN) },
  807. X    { "lemure", S_IMP, 3, 3, 7, 0, -7,
  808. X      (G_HELL | G_GENO | G_LGROUP | G_NOCORPSE | 1),
  809. X      { { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  810. X      10, 100, 0, MS_SILENT, MZ_MEDIUM, M1_POIS | M1_SLEE_RES | M1_REGEN |
  811. X      M1_STALK, M2_HOSTILE | M2_WANDER, C(RED) },
  812. X    { "imp", S_IMP, 3, 12, 2, 20, -7, (G_GENO | 1),
  813. X      { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  814. X      1, 10, 0, MS_JEER, MZ_TINY, M1_REGEN | M1_STALK, M2_WANDER, C(RED) },
  815. X    { "quasit", S_IMP, 3, 15, 2, 20, -7, (G_GENO | 2),
  816. X      { { AT_CLAW, AD_DRDX, 1, 2 }, { AT_CLAW, AD_DRDX, 1, 2 },
  817. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  818. X      20, 200, 0, MS_SILENT, MZ_SMALL,
  819. X      M1_POIS_RES | M1_REGEN | M1_STALK, 0, C(RED) },
  820. X    { "tengu", S_IMP, 6, 13, 5, 30, 7, (G_GENO | 3),
  821. X      { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  822. X      30, 300, 0, MS_SQAWK, MZ_SMALL,
  823. X      M1_POIS_RES | M1_TPORT | M1_TPORT_CONTROL | M1_STALK, 0, C(CYAN) },
  824. X/*    jellies     */
  825. X    { "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
  826. X      { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  827. X      2, 20, 0, MS_SILENT, MZ_MEDIUM,
  828. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES,
  829. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BLUE) },
  830. X    { "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
  831. X      { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  832. X      2, 20, 0, MS_SILENT, MZ_MEDIUM,
  833. X      M1_NOEYES | M1_NOHANDS | M1_POIS | M1_STON_RES,
  834. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(GREEN) },
  835. X    { "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
  836. X      { { AT_ENGL, AD_ACID, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  837. X      2, 20, 0, MS_SILENT, MZ_MEDIUM,
  838. X      M1_NOEYES | M1_NOHANDS | M1_POIS | M1_STON_RES,
  839. X      M2_HOSTILE | M2_OMNIVORE | M2_NOLIMBS | M2_AMORPHOUS, C(HI_GOLD)},
  840. X/*    kobolds     */
  841. X    { "kobold", S_KOBOLD,  0, 6, 7, 0, -2, (G_GENO | 1),
  842. X      { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  843. X      10, 100, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
  844. X      M2_HOSTILE, C(BROWN) },
  845. X    { "large kobold", S_KOBOLD,  1, 6, 6, 0, -3, (G_GENO | 1),
  846. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  847. X      15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT,
  848. X      M2_HOSTILE, C(BROWN) },
  849. X    { "kobold lord", S_KOBOLD,  2, 6, 5, 0, -4, (G_GENO | 1),
  850. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  851. X      20, 200, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_COLLECT |
  852. X      M1_LORD, M2_HOSTILE, C(HI_LORD) },
  853. X    { "kobold shaman", S_KOBOLD, 1, 6, 6, 10, -4, (G_GENO | 1),
  854. X      { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  855. X      15, 150, 0, MS_ORC, MZ_SMALL, M1_HUMANOID | M1_POIS | M1_MAGIC,
  856. X      M2_HOSTILE, C(BROWN) },
  857. X/*    leprechauns    */
  858. X    { "leprechaun", S_LEPRECHAUN, 5, 15, 8, 20, 0, (G_GENO | 4),
  859. X      { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_SGLD, 0, 0 },
  860. X        NO_ATTK, NO_ATTK, NO_ATTK },
  861. X      30, 300, 0, MS_LAUGH, MZ_TINY, M1_HUMANOID | M1_TPORT | M1_GREEDY,
  862. X      M2_HOSTILE, C(GREEN) },
  863. X/*    mimics    */
  864. X    { "small mimic", S_MIMIC, 7, 3, 7, 0, 0, (G_GENO | 2),
  865. X      { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  866. X      20, 200, 0, MS_SILENT, MZ_MEDIUM, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
  867. X      M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE, C(BROWN) },
  868. X    { "large mimic", S_MIMIC, 8, 3, 7, 10, 0, (G_GENO | 1),
  869. X      { { AT_CLAW, AD_STCK, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  870. X      40, 400, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
  871. X      M2_HOSTILE | M2_STRONG | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE,
  872. X      C(BROWN) },
  873. X    { "giant mimic", S_MIMIC, 9, 3, 7, 20, 0, (G_GENO | 1),
  874. X      { { AT_CLAW, AD_STCK, 3, 6 }, { AT_CLAW, AD_STCK, 3, 6 },
  875. X        NO_ATTK, NO_ATTK, NO_ATTK },
  876. X      60, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
  877. X      M2_HOSTILE | M2_STRONG | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE,
  878. X      C(BROWN) },
  879. X/*    nymphs    */
  880. X    { "wood nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
  881. X      { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
  882. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
  883. X      M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_FEM, M2_HOSTILE, C(GREEN) },
  884. X    { "water nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
  885. X      { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
  886. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
  887. X      M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_FEM | M1_SWIM,
  888. X      M2_HOSTILE, C(BLUE) },
  889. X    { "mountain nymph", S_NYMPH, 3, 12, 9, 20, 0, (G_GENO | 2),
  890. X      { { AT_CLAW, AD_SITM, 0, 0 }, { AT_CLAW, AD_SEDU, 0, 0 },
  891. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0, MS_SEDUCE, MZ_HUMAN,
  892. X      M1_HUMANOID | M1_TPORT | M1_COLLECT | M1_FEM, M2_HOSTILE, C(BROWN) },
  893. X/*    orcs    */
  894. X    { "goblin", S_ORC,  0, 6, 6, 0, -3, (G_GENO | 2),
  895. X      { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  896. X      10, 100, 0, MS_ORC, MZ_SMALL,
  897. X      M1_HUMANOID | M1_COLLECT, M2_ORC, C(YELLOW) },
  898. X    { "hobgoblin", S_ORC,  1, 9, 6, 0, -4, (G_GENO | 2),
  899. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  900. X      20, 200, 0, MS_ORC, MZ_HUMAN,
  901. X      M1_HUMANOID | M1_COLLECT, M2_ORC | M2_STRONG, C(RED) },
  902. X    /* "orc" for zombie corpses only; they don't get created at random */
  903. X    { "orc", S_ORC,  1, 9, 6, 0, -3, (G_GENO | G_NOGEN | G_LGROUP),
  904. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  905. X      15, 150, 0, MS_ORC, MZ_HUMAN,
  906. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  907. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  908. X    { "hill orc", S_ORC, 2, 9, 6, 0, -4, (G_GENO | G_LGROUP | 2),
  909. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  910. X      20, 200, 0, MS_ORC, MZ_HUMAN,
  911. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  912. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  913. X#ifdef TOLKIEN
  914. X    { "Mordor orc", S_ORC, 3, 5, 6, 0, -5, (G_GENO | G_LGROUP | 1),
  915. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  916. X      20, 200, 0, MS_ORC, MZ_HUMAN,
  917. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  918. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  919. X    { "Uruk-hai", S_ORC, 3, 7, 5, 0, -4, (G_GENO | G_LGROUP | 1),
  920. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  921. X      30, 300, 0, MS_ORC, MZ_HUMAN,
  922. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  923. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  924. X#endif
  925. X    { "orc shaman", S_ORC, 3, 9, 5, 10, -5, (G_GENO | 1),
  926. X      { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  927. X      30, 300, 0, MS_ORC, MZ_HUMAN,
  928. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  929. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  930. X    { "orc-captain", S_ORC, 5, 5, 4, 0, -5, (G_GENO | 1),
  931. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  932. X        NO_ATTK, NO_ATTK, NO_ATTK },
  933. X      35, 350, 0, MS_ORC, MZ_HUMAN,
  934. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  935. X      M2_ORC | M2_HOSTILE | M2_STRONG, C(BROWN) },
  936. X/*     piercers    */
  937. X    { "rock piercer", S_PIERCER, 3, 1, 3, 0, 0, (G_GENO | 2),
  938. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  939. X      20, 200, 0, MS_SILENT, MZ_SMALL, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
  940. X      M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE, C(GRAY) },
  941. X    { "iron piercer", S_PIERCER, 5, 1, 0, 0, 0, (G_GENO | 1),
  942. X      { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  943. X      40, 300, 0, MS_SILENT, MZ_MEDIUM, M1_ANIMAL | M1_NOEYES | M1_NOHANDS,
  944. X      M2_HOSTILE | M2_HIDE | M2_NOLIMBS | M2_CARNIVORE, C(GRAY) },
  945. X/*    quadrupeds (generic)    */
  946. X    { "rothe", S_QUADRUPED, 2, 9, 7, 0, 0, (G_GENO | G_SGROUP | 4),
  947. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 1, 3 },
  948. X        { AT_BITE, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
  949. X      10, 100, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  950. X      M2_HOSTILE | M2_CARNIVORE, C(WHITE) },
  951. X    { "osquip", S_QUADRUPED, 3, 12, 7, 0, 0, (G_GENO | G_SGROUP | 3),
  952. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  953. X      20, 200, 0, MS_SQEEK, MZ_SMALL, M1_ANIMAL | M1_NOHANDS,
  954. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  955. X#ifdef TOLKIEN
  956. X    { "mumakil", S_QUADRUPED, 5, 9, 0, 0, -2, (G_GENO | 1),
  957. X      { { AT_BUTT, AD_PHYS, 4, 12 }, { AT_BITE, AD_PHYS, 2, 6 },
  958. X        NO_ATTK, NO_ATTK, NO_ATTK },
  959. X      70, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  960. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(GRAY) },
  961. X#endif
  962. X    { "leocrotta", S_QUADRUPED, 6, 18, 4, 10, 0, (G_GENO | 2),
  963. X      { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_BITE, AD_PHYS, 2, 6 },
  964. X        { AT_CLAW, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  965. X      50, 500, 0, MS_IMITATE, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  966. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
  967. X    { "wumpus", S_QUADRUPED, 8, 3, 2, 10, 0, (G_GENO | 1),
  968. X      { { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  969. X      50, 500, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  970. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(HI_MON) },
  971. X    { "titanothere", S_QUADRUPED, 12, 12, 6, 0, 0, (G_GENO | 2),
  972. X      { { AT_CLAW, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  973. X      65, 650, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  974. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(GRAY) },
  975. X    { "baluchitherium", S_QUADRUPED, 14, 12, 5, 0, 0, (G_GENO | 2),
  976. X      { { AT_CLAW, AD_PHYS, 5, 4 }, { AT_CLAW, AD_PHYS, 5, 4 },
  977. X        NO_ATTK, NO_ATTK, NO_ATTK },
  978. X      80, 800, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  979. X      M2_HOSTILE | M2_STRONG | M2_HERBIVORE | M2_THICK_HIDE, C(GRAY) },
  980. X/*    rodents     */
  981. X    { "sewer rat",    S_RODENT, 0, 12, 7, 0, 0, (G_GENO | G_SGROUP | 1),
  982. X      { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  983. X      2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  984. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  985. X    { "giant rat",    S_RODENT, 1, 10, 7, 0, 0, (G_GENO | G_SGROUP | 2),
  986. X      { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  987. X      3, 30, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  988. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  989. X    { "rabid rat", S_RODENT, 2, 12, 6, 0, 0, (G_GENO | 1),
  990. X      { { AT_BITE, AD_DRCO, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  991. X      3, 10, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_POIS,
  992. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  993. X    { "ratwere", S_RODENT, 2, 12, 6, 10, -7, G_NOGEN | G_NOCORPSE,
  994. X      { { AT_BITE, AD_WERE, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  995. X      3, 30, 0, MS_SQEEK, MZ_TINY, M1_WERE | M1_NOHANDS | M1_NOPOLY |
  996. X      M1_POIS | M1_REGEN, M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  997. X    { "rock mole", S_RODENT, 3, 3, 0, 20, 0, (G_GENO | 2),
  998. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  999. X      3, 30, 0, MS_SILENT, MZ_SMALL, M1_ANIMAL | M1_NOHANDS |
  1000. X      M1_GREEDY | M1_JEWELS | M1_COLLECT, M2_HOSTILE | M2_TUNNEL, C(BROWN)},
  1001. X/*    spiders and scorpions    */
  1002. X    { "cave spider", S_SPIDER, 1, 12, 3, 0, 0, (G_GENO | G_SGROUP | 2),
  1003. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1004. X      5, 50, 0, MS_SILENT, MZ_TINY,
  1005. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS_RES,
  1006. X      M2_HOSTILE | M2_CONCEAL | M2_CARNIVORE, C(WHITE) },
  1007. X    { "scorpion", S_SPIDER, 5, 15, 3, 0, 0, (G_GENO | 2),
  1008. X      { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
  1009. X        { AT_STNG, AD_DRST, 1, 4 }, NO_ATTK, NO_ATTK },
  1010. X      10, 100, 0, MS_SILENT, MZ_SMALL,
  1011. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS,
  1012. X      M2_HOSTILE | M2_CONCEAL | M2_CARNIVORE, C(RED) },
  1013. X    { "giant spider", S_SPIDER, 5, 15, 4, 0, 0, (G_GENO | 1),
  1014. X      { { AT_BITE, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1015. X      10, 100, 0, MS_SILENT, MZ_LARGE,
  1016. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
  1017. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(MAGENTA) },
  1018. X/*    trappers, lurkers, &c.    */
  1019. X    { "lurker above", S_TRAPPER, 10, 3, 3, 0, 0, (G_GENO | 2),
  1020. X      { { AT_ENGL, AD_DGST, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1021. X      40, 350, 0, MS_SILENT, MZ_HUGE,
  1022. X      M1_ANIMAL | M1_NOEYES | M1_NOHANDS | M1_STALK | M1_FLY,
  1023. X      M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE, C(GRAY) },
  1024. X    { "trapper", S_TRAPPER, 12, 3, 3, 0, 0, (G_GENO | 2),
  1025. X      { { AT_ENGL, AD_DGST, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1026. X      40, 350, 0, MS_SILENT, MZ_HUGE,
  1027. X      M1_ANIMAL | M1_NOEYES | M1_NOHANDS | M1_STALK,
  1028. X      M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE, C(GRAY) },
  1029. X/*    unicorns    */
  1030. X    { "white unicorn", S_UNICORN, 4, 24, 2, 70, 7, (G_GENO | 2),
  1031. X      { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
  1032. X        NO_ATTK, NO_ATTK, NO_ATTK },
  1033. X      30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
  1034. X      M2_WANDER | M2_STRONG | M2_HERBIVORE, C(WHITE) },
  1035. X    { "gray unicorn", S_UNICORN, 4, 24, 2, 70, 0, (G_GENO | 1),
  1036. X      { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
  1037. X        NO_ATTK, NO_ATTK, NO_ATTK },
  1038. X      30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
  1039. X      M2_WANDER | M2_STRONG | M2_HERBIVORE, C(GRAY) },
  1040. X    { "black unicorn", S_UNICORN, 4, 24, 2, 70, -7, (G_GENO | 1),
  1041. X      { { AT_BUTT, AD_PHYS, 1, 12 }, { AT_KICK, AD_PHYS, 1, 6 },
  1042. X        NO_ATTK, NO_ATTK, NO_ATTK },
  1043. X      30, 300, 0, MS_NEIGH, MZ_LARGE, M1_NOHANDS | M1_POIS_RES | M1_JEWELS,
  1044. X      M2_WANDER | M2_STRONG | M2_HERBIVORE, C(BLACK) },
  1045. X/*    vortices    */
  1046. X    { "fog cloud",    S_VORTEX, 3,  1, 0, 0, 0, (G_GENO | G_NOCORPSE | 2),
  1047. X      { { AT_ENGL, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1048. X      10, 0, 0, MS_SILENT, MZ_HUGE,
  1049. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
  1050. X      M2_HOSTILE | M2_NOLIMBS, C(GRAY) },
  1051. X    { "dust vortex", S_VORTEX, 4, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 2),
  1052. X      { { AT_ENGL, AD_BLND, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1053. X      20, 0, 0, MS_SILENT, MZ_HUGE,
  1054. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
  1055. X      M2_HOSTILE | M2_NOLIMBS, C(BROWN) },
  1056. X    { "energy vortex", S_VORTEX, 6, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
  1057. X      { { AT_ENGL, AD_ELEC, 1, 6 }, { AT_ENGL, AD_DREN, 0, 0 },
  1058. X        NO_ATTK, NO_ATTK, NO_ATTK }, 20, 0, 0, MS_SILENT, MZ_HUGE,
  1059. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_ELEC_RES,
  1060. X      M2_HOSTILE | M2_NOLIMBS, C(BRIGHT|BLUE) },
  1061. X    { "ice vortex", S_VORTEX, 5, 20, 2, 30, 0, (G_GENO | G_NOCORPSE | 1),
  1062. X      { { AT_ENGL, AD_COLD, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1063. X      30, 0, 0, MS_SILENT, MZ_HUGE,
  1064. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES,
  1065. X      M2_HOSTILE | M2_NOLIMBS, C(CYAN) },
  1066. X    { "steam vortex", S_VORTEX, 7, 22, 2, 30, 0,
  1067. X      (G_HELL | G_GENO | G_NOCORPSE | 2),
  1068. X      { { AT_ENGL, AD_FIRE, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1069. X      30, 0, 0, MS_SILENT, MZ_HUGE,
  1070. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FIRE_RES,
  1071. X      M2_HOSTILE | M2_NOLIMBS, C(BLUE) },
  1072. X    { "fire vortex", S_VORTEX, 8, 22, 2, 30, 0,
  1073. X      (G_HELL | G_GENO | G_NOCORPSE | 1),
  1074. X      { { AT_ENGL, AD_FIRE, 1, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1075. X      30, 0, 0, MS_SILENT, MZ_HUGE,
  1076. X      M1_FLY | M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FIRE_RES,
  1077. X      M2_HOSTILE | M2_NOLIMBS, C(YELLOW) },
  1078. X/*    worms    */
  1079. X#ifdef WORM
  1080. X    { "baby long worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
  1081. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1082. X      25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  1083. X      M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(BROWN) },
  1084. X#endif
  1085. X    { "baby purple worm", S_WORM, 8, 3, 5, 0, 0, G_GENO,
  1086. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1087. X      25, 250, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_NOHANDS,
  1088. X      M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(MAGENTA) },
  1089. X#ifdef WORM
  1090. X    { "long worm", S_WORM, 8, 3, 5, 10, 0, (G_GENO | 2),
  1091. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1092. X      50, 500, 0, MS_SILENT, MZ_GIGANTIC,
  1093. X      M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS,
  1094. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_NOLIMBS | M2_CARNIVORE,
  1095. X      C(BROWN) },
  1096. X#endif
  1097. X    { "purple worm", S_WORM, 15, 9, 6, 20, 0, (G_GENO | 2),
  1098. X      { { AT_BITE, AD_PHYS, 2, 8 }, { AT_ENGL, AD_DGST, 1, 10 },
  1099. X        NO_ATTK, NO_ATTK, NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_GIGANTIC,
  1100. X      M1_ANIMAL | M1_NOHANDS | M1_EGGS,
  1101. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_NOLIMBS | M2_CARNIVORE,
  1102. X      C(MAGENTA)},
  1103. X/*    xan, &c.    */
  1104. X    { "grid bug", S_XAN, 0, 12, 9, 0, 0,
  1105. X      (G_GENO | G_SGROUP | G_NOCORPSE | 3),
  1106. X      { { AT_BITE, AD_ELEC, 1, 1}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1107. X      5, 50, 0, MS_BUZZ, MZ_TINY, M1_ANIMAL | M1_ELEC_RES, M2_HOSTILE,
  1108. X      C(MAGENTA)},
  1109. X    { "xan", S_XAN, 7, 18, -4, 0, 0, (G_GENO | 3),
  1110. X      { { AT_STNG, AD_LEGS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1111. X      30, 300, 0, MS_BUZZ, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS |
  1112. X      M1_POIS | M1_POIS_RES, M2_HOSTILE, C(RED) },
  1113. X/*    yellow light    */
  1114. X    { "yellow light", S_YLIGHT,  3, 15, 0, 0, 0, (G_GENO | 4),
  1115. X      { { AT_EXPL, AD_BLND, 10, 20 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1116. X      1, 10, 0, MS_SILENT, MZ_SMALL, M1_FLY | M1_NOHANDS,
  1117. X      M2_HOSTILE | M2_NOLIMBS, C(BRIGHT|YELLOW)},
  1118. X/*    zruty    */
  1119. X    { "zruty", S_ZRUTY, 9, 8, 3, 0, 0, (G_GENO | 2),
  1120. X      { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  1121. X        { AT_BITE, AD_PHYS, 3, 6 }, NO_ATTK, NO_ATTK },
  1122. X      60, 600, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  1123. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
  1124. X/*    Apes    */
  1125. X    { "ape", S_APE, 4, 12, 6, 0, 0, (G_GENO | G_SGROUP | 2),
  1126. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  1127. X        { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
  1128. X      50, 500, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  1129. X      M2_STRONG | M2_CARNIVORE, C(BROWN) },
  1130. X    { "carnivorous ape", S_APE, 5, 12, 6, 0, 0, (G_GENO | 1),
  1131. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  1132. X        { AT_HUGS, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK },
  1133. X      55, 550, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  1134. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(BROWN) },
  1135. X/*    Bats    */
  1136. X    { "bat", S_BAT, 0, 22, 8, 0, 0, (G_GENO | G_SGROUP | 1),
  1137. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1138. X      2, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_NOHANDS,
  1139. X      M2_WANDER | M2_CARNIVORE, C(BLACK) },
  1140. X    { "giant bat", S_BAT, 2, 22, 7, 0, 0, (G_GENO | 2),
  1141. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1142. X      3, 30, 0, MS_SQEEK, MZ_MEDIUM, M1_FLY | M1_ANIMAL | M1_NOHANDS,
  1143. X      M2_WANDER | M2_HOSTILE | M2_CARNIVORE, C(BLACK) },
  1144. X    { "vampire bat", S_BAT, 5, 20, 6, 0, 0, (G_GENO | 2),
  1145. X      { { AT_BITE, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRST, 0, 0 },
  1146. X        NO_ATTK, NO_ATTK, NO_ATTK },
  1147. X      3, 20, 0, MS_SQEEK, MZ_TINY, M1_FLY | M1_ANIMAL | M1_UNDEAD |
  1148. X      M1_NOHANDS | M1_POIS | M1_REGEN, M2_HOSTILE, C(BLACK) },
  1149. X/*    Centaurs    */
  1150. X    { "plains centaur", S_CENTAUR, 4, 18, 4, 0, 0, (G_GENO | 1),
  1151. X      { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_KICK, AD_PHYS, 1, 6 },
  1152. X        NO_ATTK, NO_ATTK, NO_ATTK},
  1153. X      50, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
  1154. X      C(BROWN)  },
  1155. X    { "forest centaur", S_CENTAUR, 5, 18, 3, 10, -1, (G_GENO | 1),
  1156. X      { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_KICK, AD_PHYS, 1, 6 },
  1157. X        NO_ATTK, NO_ATTK, NO_ATTK},
  1158. X      55, 600, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
  1159. X      C(GREEN)  },
  1160. X    { "mountain centaur", S_CENTAUR, 6, 20, 2, 10, -3, (G_GENO | 1),
  1161. X      { { AT_WEAP, AD_PHYS, 1, 10 }, { AT_KICK, AD_PHYS, 1, 6 },
  1162. X        { AT_KICK, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK },
  1163. X      55, 500, 0, MS_SILENT, MZ_LARGE, M1_COLLECT | M1_GREEDY, M2_STRONG,
  1164. X      C(BROWN)},
  1165. X/*    Dragons     */
  1166. X    { "baby gray dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1167. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1168. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1169. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
  1170. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(GRAY) },
  1171. X    { "baby red dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1172. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1173. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1174. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_FIRE_RES,
  1175. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(RED) },
  1176. X    { "baby white dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1177. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1178. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1179. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_COLD_RES,
  1180. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(WHITE) },
  1181. X    { "baby blue dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1182. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1183. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1184. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_ELEC_RES,
  1185. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(BLUE) },
  1186. X    { "baby green dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1187. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1188. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1189. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_POIS |
  1190. X      M1_POIS_RES, M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE,
  1191. X      C(GREEN)},
  1192. X    { "baby orange dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1193. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1194. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1195. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS | M1_SLEE_RES,
  1196. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE,
  1197. X      C(ORANGE_COLORED) },
  1198. X    { "baby black dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1199. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1200. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1201. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
  1202. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(BLACK) },
  1203. X    { "baby yellow dragon", S_DRAGON, 12, 9, 2, 10, 0, G_GENO,
  1204. X      { { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1205. X      50, 500, 0, MS_ROAR, MZ_HUGE,
  1206. X      M1_FLY | M1_NOHANDS | M1_GREEDY | M1_JEWELS,
  1207. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_THICK_HIDE, C(YELLOW) },
  1208. X    { "gray dragon", S_DRAGON, 10, 9, -1, 20, 4, (G_GENO | 1),
  1209. X      { { AT_BREA, AD_MAGM, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1210. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1211. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1212. X      M1_NOHANDS | M1_EGGS | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1213. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1214. X      C(GRAY)},
  1215. X    { "red dragon", S_DRAGON, 10, 9, -1, 20, -4, (G_GENO | 1),
  1216. X      { { AT_BREA, AD_FIRE, 6, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1217. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1218. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1219. X      M1_NOHANDS | M1_EGGS | M1_FIRE_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1220. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1221. X      C(RED)},
  1222. X    { "orange dragon", S_DRAGON, 10, 9, -1, 20, 5, (G_GENO | 1),
  1223. X      { { AT_BREA, AD_SLEE, 4, 25 }, { AT_BITE, AD_PHYS, 3, 8 },
  1224. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1225. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1226. X      M1_NOHANDS | M1_EGGS | M1_SLEE_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1227. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1228. X      C(ORANGE_COLORED)},
  1229. X    { "white dragon", S_DRAGON, 10, 9, -1, 20, -5, (G_GENO | 1),
  1230. X      { { AT_BREA, AD_COLD, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1231. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1232. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1233. X      M1_NOHANDS | M1_EGGS | M1_COLD_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1234. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1235. X      C(WHITE)},
  1236. X    { "black dragon", S_DRAGON, 10, 9, -1, 20, -6, (G_GENO | 1),
  1237. X      { { AT_BREA, AD_DISN, 4, 10 }, { AT_BITE, AD_PHYS, 3, 8 },
  1238. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1239. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1240. X      M1_NOHANDS | M1_EGGS | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1241. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1242. X      C(BLACK)},
  1243. X    { "blue dragon", S_DRAGON, 10, 9, -1, 20, -7, (G_GENO | 1),
  1244. X      { { AT_BREA, AD_ELEC, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1245. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1246. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC, M1_FLY | M1_SEE_INVIS |
  1247. X      M1_NOHANDS | M1_EGGS | M1_ELEC_RES | M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1248. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1249. X      C(BLUE)},
  1250. X    { "green dragon", S_DRAGON, 10, 9, -1, 20, 6, (G_GENO | 1),
  1251. X      { { AT_BREA, AD_DRST, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1252. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1253. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
  1254. X      M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES |
  1255. X      M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1256. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1257. X      C(GREEN)},
  1258. X    { "yellow dragon", S_DRAGON, 10, 9, -1, 20, 7, (G_GENO | 1),
  1259. X      { { AT_BREA, AD_ACID, 4, 6 }, { AT_BITE, AD_PHYS, 3, 8 },
  1260. X        { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK },
  1261. X      150, 1500, 0, MS_ROAR, MZ_GIGANTIC,
  1262. X      M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_EGGS | M1_POIS | M1_STON_RES |
  1263. X      M1_GREEDY | M1_JEWELS | M1_MAGIC,
  1264. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE | M2_THICK_HIDE,
  1265. X      C(YELLOW)},
  1266. X/*    Elementals    */
  1267. X    { "air elemental", S_ELEMENTAL, 8, 36, 2, 30, 0, (G_NOCORPSE | 1),
  1268. X      { { AT_ENGL, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1269. X      5, 0, 0, MS_SILENT, MZ_HUGE,
  1270. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FLY,
  1271. X      M2_STRONG | M2_NOLIMBS, C(CYAN) },
  1272. X    { "fire elemental", S_ELEMENTAL, 8, 12, 2, 30, 0, (G_NOCORPSE | 1),
  1273. X      { { AT_CLAW, AD_FIRE, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1274. X      5, 0, 0, MS_SILENT, MZ_HUGE,
  1275. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_FLY | M1_FIRE_RES,
  1276. X      M2_STRONG | M2_NOLIMBS, C(YELLOW) },
  1277. X    { "earth elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
  1278. X      { { AT_CLAW, AD_PHYS, 4, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1279. X      50, 0, 0, MS_SILENT, MZ_HUGE,
  1280. X      M1_WALLWALK | M1_NOEYES | M1_NOHANDS | M1_POIS_RES |
  1281. X      M1_STON_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(BROWN) },
  1282. X    { "water elemental", S_ELEMENTAL, 8, 6, 2, 30, 0, (G_NOCORPSE | 1),
  1283. X      { { AT_CLAW, AD_PHYS, 5, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1284. X      50, 0, 0, MS_SILENT, MZ_HUGE,
  1285. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_SWIM,
  1286. X      M2_STRONG | M2_NOLIMBS, C(BLUE) },
  1287. X/*    Fungi    */
  1288. X    { "violet fungus", S_FUNGUS, 3, 1, 7, 0, 0, (G_GENO | 2),
  1289. X      { { AT_TUCH, AD_PHYS, 1, 4 }, { AT_TUCH, AD_STCK, 0, 0 },
  1290. X        NO_ATTK, NO_ATTK, NO_ATTK }, 10, 100, 0, MS_SILENT, MZ_SMALL,
  1291. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
  1292. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE, C(MAGENTA) },
  1293. X    { "brown mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
  1294. X      { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1295. X      5, 30, 0, MS_SILENT, MZ_SMALL, M1_NOEYES | M1_NOHANDS |
  1296. X      M1_POIS_RES | M1_COLD_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE,
  1297. X      C(BROWN)},
  1298. X    { "yellow mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 2),
  1299. X      { { AT_NONE, AD_STUN, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1300. X      5, 30, 0, MS_SILENT, MZ_SMALL, M1_NOEYES | M1_NOHANDS |
  1301. X      M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE,
  1302. X      C(YELLOW)},
  1303. X    { "green mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
  1304. X      { { AT_NONE, AD_ACID, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1305. X      5, 30, 0, MS_SILENT, MZ_SMALL, M1_NOEYES | M1_NOHANDS |
  1306. X      M1_POIS | M1_STON_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE,
  1307. X      C(GREEN)},
  1308. X    { "red mold", S_FUNGUS, 1, 0, 9, 0, 0, (G_GENO | 1),
  1309. X      { { AT_NONE, AD_FIRE, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1310. X      5, 30, 0, MS_SILENT, MZ_SMALL, M1_NOEYES | M1_NOHANDS |
  1311. X      M1_POIS_RES | M1_FIRE_RES, M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE,
  1312. X      C(RED)},
  1313. X/*    Gnomes    */
  1314. X    { "gnome", S_GNOME, 1, 6, 5, 4, 0, (G_GENO | G_SGROUP | 1),
  1315. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1316. X      10, 100, 0, MS_ORC, MZ_SMALL,
  1317. X      M1_HUMANOID | M1_COLLECT, 0, C(HI_MON) },
  1318. X    { "gnome lord", S_GNOME, 3, 8, 4, 4, 0, (G_GENO | 2),
  1319. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1320. X      15, 120, 0, MS_ORC, MZ_SMALL,
  1321. X      M1_HUMANOID | M1_COLLECT | M1_LORD, 0, C(HI_MON) },
  1322. X    { "gnome king", S_GNOME, 5, 10, 2, 20, 0, (G_GENO | 1),
  1323. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1324. X      20, 150, 0, MS_ORC, MZ_SMALL,
  1325. X      M1_HUMANOID | M1_COLLECT | M1_PRINCE, 0, C(HI_LORD) },
  1326. X    { "gnomish wizard", S_GNOME, 3, 10, 4, 10, 0, (G_GENO | 1),
  1327. X      { { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1328. X      15, 120, 0, MS_ORC, MZ_SMALL,
  1329. X      M1_HUMANOID | M1_MAGIC, 0, C(HI_MON) },
  1330. X#ifdef SPLITMON_1
  1331. X};
  1332. X#endif
  1333. X#endif /* !SPLITMON_2 */
  1334. END_OF_FILE
  1335. if test 39921 -ne `wc -c <'src/monst.c1'`; then
  1336.     echo shar: \"'src/monst.c1'\" unpacked with wrong size!
  1337. fi
  1338. # end of 'src/monst.c1'
  1339. echo shar: End of archive 14 \(of 15\).
  1340. cp /dev/null ark14isdone
  1341. MISSING=""
  1342. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  1343.     if test ! -f ark${I}isdone ; then
  1344.     MISSING="${MISSING} ${I}"
  1345.     fi
  1346. done
  1347. if test "${MISSING}" = "" ; then
  1348.     echo You have unpacked all 15 archives.
  1349.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1350. else
  1351.     echo You still need to unpack the following archives:
  1352.     echo "        " ${MISSING}
  1353. fi
  1354. ##  End of shell archive.
  1355. exit 0
  1356.